package javaCode.chapter09.innerclass;

public class StaticInnerClass {
    public static void main(String[] args) {
        Outer10 outer10 = new Outer10();
        outer10.In();

        //外部其他类  使用静态内部类
        //方式1
        //因为是静态内部类，是可以直接通过类名直接访问(前提是满足访问权限)
        Outer10.Inner10 inner10 = new Outer10.Inner10();
        inner10.say();
        //方式2
        //编写一个方法，可以返回静态内部类的对象实例
        Outer10.Inner10 inner101 = outer10.getInner10();
        inner101.say();

        //
        Outer10.Inner10 inner10_ = Outer10.getInner10_();

    }
}

class Outer10{ //外部类
    private int n1 = 10;
    private static String name = "张三";
    private static void cry(){}
    //1. 放在外部类的成员位置
    //2. 使用static 修饰
    //3. 可以访问外部类的所有 静态成员，包含私有的，但不能访问非静态的成员
    //4. 可以添加任意的修饰符 (public、protected、默认、private)，因为它的地位就是一个成员
    static class Inner10{ //静态成员内部类
        private String name = "须佐佐助";
        public void say(){
            System.out.println("name=" + name + "外部类 name=" + Outer10.name);
            cry();
        }
    }

    public void In(){ //外部类 --访问-->静态内部类 访问方式：创建对象，再访问
        Inner10 inner10 = new Inner10();
        inner10.say();
    }

    public Inner10 getInner10(){
        return new Inner10();
    }

    public static Inner10 getInner10_(){
        return new Inner10();
    }
}